package com.song.boot.springstudy.reference;

import com.song.boot.springstudy.entity.UserEntity;

import java.lang.ref.SoftReference;

/**
 * 软引用 再内存泄露之前会被回收掉
 */
public class SoftReferenceDemo {
    public static void main(String[] args) {
        //。。。一堆业务代码

        UserEntity a = new UserEntity();
        a.setId(12);
        a.setType("vip");
        a.setName("张三丰");
//。。业务代码使用到了我们的Worker实例

        // 使用完了a，将它设置为soft 引用类型，并且释放强引用；
        SoftReference sr = new SoftReference(a);
        a = null;
        System.out.println(a);
        System.out.println("===================");
//这个时候他是有可能执行一次GC的
        System.gc();

        // 下次使用时
        /*
        sr != null 说明 对象没有回收
        sr == null 说明 对象已被回收
         */
        if (sr != null) {
            a = (UserEntity) sr.get();
            System.out.println(a.toString());
        } else {
            // GC由于内存资源不足，可能系统已回收了a的软引用，
            // 因此需要重新装载。
            a = new UserEntity();
            sr = new SoftReference(a);
        }
    }


}